www.gusucode.com > (粗糙集数据分析工具箱) matlab源码程序 > matlab代做 修改 程序工具箱 (粗糙集数据分析工具箱) matla 中使用/rsda/val_redu.m

    function y=val_redu(re,d,x)
[p,q]=size(x); yy=[re,d]; zz=[1:q];
zy=setdiff(zz,yy); [zy1,zy2]=size(zy);
for u=q:-1:1
    for v=zy2:-1:1
        if zy(v)==u
            x(:,u)=[];
        end
    end
end

y=x;
tmp=y;
[yp,yq]=size(y);
[dp,dq]=size(d);
%z=zeros(size(y));
 z=ones(yp,yq-dq)*(-1);
for i=1:yp 
    for j=1:yq-dq
    tmp(:,j)=[];
    [tp,tq]=size(tmp);
        for ii=1:yp
           if ii==i
              a=0;    
           elseif tmp(ii,1:tq-dq)==tmp(i,1:tq-dq)&tmp(ii,tq-dq+1:tq)~=tmp(i,tq-dq+1:tq)
                z(i,j)=y(i,j);               
           elseif tmp(ii,:)==tmp(i,:)
                 y(i,j)=inf;
                 z(i,j)=y(i,j);
           end 
         end
           tmp=x;    
      end 
end
num=zeros(1,yp);
for i=1:yp
     for j=1:yq-dq
        if z(i,j)==-1
           y(i,j)=-1;
           z(i,j)=inf;
       end
    end
end

for i=1:yp
    for j=1:yq-dq
        if z(i,j)==inf
             num(1,i)=num(1,i)+1;
         end
    end
end
for i=1:yp
    if num(1,i)==yq-dq;
       for j=1:yq-dq
           if y(i,j)==-1
               y(i,j)=x(i,j);
           end
        end
    end
end

for i=1:yp
    omit{i}=[]
    for j=1:yq-dq
        if y(i,j)==-1
            for jj=1:yq-dq
                if z(i,jj)~=inf
                   omit{i}=cat(2,omit{i},jj);
                end
            end
            tt=omit{i}
            hhh=y(i,omit{i})
            ddd=y(i,yq-dq+1:yq)
            if ismember(ind_cls(hhh,omit{i},x),ind_cls(ddd,yq-dq+1:yq,x))
                y(i,j)=inf;
            else
                y(i,j)=x(i,j);
            end            
         end
     end
end
for i=yp:-1:1
   if y(i,1:yq-dq)==inf*ones(size( y(i,1:yq-dq)))
      y(i,:)=[];
  end
end
        
y=sam_del(y);